# @Time : 2020/7/20 10:29
# @Author : Fioman 
# @Phone : 13149920693
"""
对于更复杂的仿射变换,Opencv提供了函数cv.getAffineTransform()来生成仿射函数cv.warpAffine()所使用的转转矩阵M.
该函数的语法格式为:
retval = cv.getAffineTransform(src,dst)
src 和 dst 是包含三个二维数组(x,y)点的数组.上述参数通过函数cv.getAffineTransform()定义了两个平行四边形.
src和dst中的三个点分贝对应平行四边形的左上角,右上角,左下角三个点.
"""

import cv2 as cv
import numpy as np

img = cv.imread("lenaColor.png", cv.IMREAD_COLOR)
rows, cols, channels = img.shape

p1 = np.float32([[0, 0],
                 [cols - 1, 0],
                 [0, rows - 1]])

p2 = np.float32([[0, rows * 0.33],
                 [cols * 0.85, rows * 0.25],
                 [cols * 0.15, rows * 0.7]])


M = cv.getAffineTransform(p1,p2)
dst = cv.warpAffine(img,M,(cols,rows))

cv.imshow("original",img)
cv.imshow("result",dst)
cv.waitKey(0)
cv.destroyAllWindows()
